package marketplace.web.beans;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import marketplace.ejb.interfaces.IContenidoDigitalEJB;
import marketplace.jpa.datas.DataCategoria;
import marketplace.jpa.datas.DataContenidoDigital;
import marketplace.jpa.datas.DataSubcategoria;
import marketplace.web.utils.UtilsBean;

@ManagedBean
@SessionScoped
public class ContenidoDigitalBean {
	

	/////////////////////////// INYECCIONES //////////////////////////////
	
	
	@EJB
	IContenidoDigitalEJB cdEjb;
	
	
	/////////////////////////// ATRIBUTOS //////////////////////////////
	
	private static String rutaProveedor = "/MarketWEB/proveedor/";
	
	private int idContenido;
	private String nombre;
	private String descripcion;	
	private String video;	
	private DataSubcategoria subcategoria;
	private DataCategoria categoria;
		
	private String proveedor;
	
	private List<DataContenidoDigital> contenidos;	
	private List<DataContenidoDigital> contenidosProveedor;
		
	
	/////////////////////////// GETERS & SETERS /////////////////////////////	
	
	
	public int getIdContenido() { return idContenido; }
	public void setIdContenido(int idContenido) { this.idContenido = idContenido; }
	
	public String getNombre() { return nombre; }
	public void setNombre(String nombre) { this.nombre = nombre; }
	
	public String getDescripcion() { return descripcion; }
	public void setDescripcion(String descripcion) { this.descripcion = descripcion; }

	public String getVideo() { return video; }
	public void setVideo(String video) { this.video = video; }
	
	public DataSubcategoria getSubcategoria() { return subcategoria; }
	public void setSubcategoria(DataSubcategoria subcategoria) { this.subcategoria = subcategoria; }
	
	public DataCategoria getCategoria() { return categoria; }
	public void setCategoria(DataCategoria categoria) { this.categoria = categoria; }	
	
	public String getProveedor() { return proveedor; }
	public void setProveedor(String proveedor) { this.proveedor = proveedor; }
	
	public List<DataContenidoDigital> getContenidos() { return contenidos; }
	public void setContenidos(List<DataContenidoDigital> contenidos) { this.contenidos = contenidos; }
	
	public List<DataContenidoDigital> getContenidosProveedor() { 
		HttpSession sesion = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);										
		String mailProveedor = (String) sesion.getAttribute("mailUsuario");
		try {
			this.setContenidosProveedor(cdEjb.getContenidoDigitalesProveedor(mailProveedor));
		} catch (Exception e) {
			System.out.println("ERROR: getContenidosProveedor :  --- "+e.getMessage());
		}		
		return contenidosProveedor;
	}
	
	public void setContenidosProveedor(List<DataContenidoDigital> contenidosProveedor) { this.contenidosProveedor = contenidosProveedor; }

	
	
	/////////////////////////// OPERACIONES ////////////////////////////
	
	
	
	@PostConstruct
	public void init(){		
		
		try {
			
			vaciarAtributos();
			/*
			HttpSession sesion = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);										
			String mailProveedor = (String) sesion.getAttribute("mailUsuario");
			String copie = (String) sesion.getAttribute("Respaldo");*/
			
			/*if (!copie.equals(null) || !copie.equals("SI")){*/
				new UtilsBean().CopiarArchivosAlServidor();
			/*	sesion.setAttribute("Respaldo", "SI");
			}*/

			setContenidos(cdEjb.getContenidoDigitales());			
			/*setContenidosProveedor(cdEjb.getContenidoDigitalesProveedor(mailProveedor));*/			

			
		} catch (Exception e) {
			System.out.println("ERROR init() ContenidoDigitalBean: " + e.getMessage());
		}
	}
		
	public void vaciarAtributos(){
		setIdContenido(0);
		setNombre("");
		setDescripcion("");
		setVideo("");
		setCategoria(new DataCategoria("",""));
		setSubcategoria(new DataSubcategoria());		
	}

	
	
	//// CONTENIDO DIGITAL //////////////////////////////////////////////////////
	
	
	//POST REGISTRAR
/*	public void postRegistroCD(ActionEvent actionEvent){
		HttpSession sesion = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
		String mailProveedor = (String) sesion.getAttribute("mailUsuario");
		try {			
			if(getNombre().isEmpty())
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Debe ingresar el nombre del contenido digital deseado",""));
			else if(getDescripcion().isEmpty())
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Debe ingresar la descricpion del contenido digital deseado",""));			
			else if(getSubcategoria().getNombre().isEmpty())
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Debe ingresar la subcategoria a la cual pertenecera el contenido digital deseado",""));			
			else if (!cdEjb.existeContenidoDigital(getNombre())){
				
				//ACA el proveedor lo obtengo de la sesion por estar logueado para poder ingresar los contenidos
				String proveedor = mailProveedor;
				
				System.out.println("postRegistroCD: ENTRO!! // CD: " + getNombre() + " // SubCategoria: " + getSubcategoria().getNombre() + " // Proveedor : "+proveedor);

				Renombro los archivos y los respaldo por el clean
				UtilsBean ub = new UtilsBean();
				ub.renombrarLogo(getNombre());
				ub.renombrarImagenes(getNombre());
				
				ub.CopiarArchivosAlRespaldo();
				
				cdEjb.guardarContenidoDigital(getNombre(), getDescripcion(), getVideo(), getSubcategoria().getNombre(), proveedor);
				
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Se ha registrado el contenido digital: ", getNombre() + "!, correctamente"));
				
				listarContenidosProveedor();
				
			}else{
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"ERROR: El contenido digital a ingresar ya existe!","Compruebe sus datos"));
			}
		} catch (Exception e) {
			System.out.println("ERROR postRegistroCD: " + e.getMessage());
		}
	}
*/	
	
	//GET MODIFICAR
	public void getModificarContenidoDigital(int idCont) throws Exception{
		DataContenidoDigital dcd = cdEjb.obtenerContenidoDigital(idCont);
		this.idContenido = dcd.getIdContenido();
		this.nombre = dcd.getNombre();
		this.descripcion = dcd.getDescripcion();
		this.video = dcd.getVideo();
		this.subcategoria = dcd.getSubcategoria();
		
		
        //Me guardo en sesion el nombre de la imagen que se tenia guardada del contenido para poder renombrarla si me cambian el nombre
		HttpSession sesion = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
		sesion.setAttribute("imagen", getNombre());
		
		ArrayList<String> imagenesGuardadas = new ArrayList<String>();
		for (int i = 0; i < 5; i++) {
			imagenesGuardadas.add(getNombre()+i);	
		}						
		sesion.setAttribute("listaImagenes", imagenesGuardadas);
		
		
		FacesContext.getCurrentInstance().getExternalContext().redirect("contenidoModificar.xhtml");
	}	
	
    //POST MODIFICAR	
    public void postModificarContenidoDigital() {
    	DataContenidoDigital cont = new DataContenidoDigital(getIdContenido(),getNombre(), getDescripcion(), getVideo(), getSubcategoria());
    	//Renombro las imagenes subidas o no
    	new UtilsBean().renombrarLogo(getNombre());
		new UtilsBean().renombrarImagenes(getNombre());
		try {
			cdEjb.modificarContenidoDigital(cont);
			System.out.println("postModificarContenidoDigital: " + getIdContenido());			
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Se ha modificado el contenido digital: " + getNombre() + " !",""));
		} catch (Exception e) {
			System.out.println("ERROR postModificarContenidoDigital: " + e.getMessage());
		}
    } 		
    
    //ELIMINAR
	public void postEliminarCD(int id){
		try {
			cdEjb.eliminarContenidoDigital(id);
			System.out.println("postEliminarContenidoDigital: " + id);
			init();
		} catch (Exception e) {
			System.out.println("ERROR postEliminarContenidoDigital: " + e.getMessage());
		}
	}

	//LISTAR
	public void listarContenidosProveedor() throws Exception{
		HttpSession sesion = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);										
		String mailProveedor = (String) sesion.getAttribute("mailUsuario");
		this.setContenidosProveedor(cdEjb.getContenidoDigitalesProveedor(mailProveedor));
		
		FacesContext.getCurrentInstance().getExternalContext().redirect(rutaProveedor+"cdListar.xhtml");
	}
	

	
	//VER
/*	public void verContenido(int id) throws Exception{
		
		System.out.println("verContenido   ----  : ----- " + id);
		
		this.setContenido(cdEjb.obtenerContenidoDigital(id));
		this.setDescripcion(cdEjb.obtenerContenidoDigital(id).getDescripcion());
		
		
		System.out.println("verContenido   getContenido  : ----- " + getContenido().getNombre());
		
		System.out.println("verContenido   getDescripcion  : ----- " + getDescripcion());
		
		FacesContext.getCurrentInstance().getExternalContext().redirect("/MarketWEB/cdVer.xhtml");
		
	}*/

	
    
/*    public List<String> listaImagenes(){
    	
    	ArrayList<String> devolver  = new ArrayList<String>();
    	UtilsBean ub = new UtilsBean();
    	for (int i = 0; i < 5; i++)
    		if (ub.existeArchivo(getContenido().getNombre()+i))
    			devolver.add(getContenido().getNombre()+i);
    	
    	return devolver;
    }*/
	
	
}
